iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0

概述

今天將會實作如何將資料進行封裝,並建立 API。

整個過程依序會經過 Entity、Service、Controller。首先會透過 Service 層跟 Entity 進行溝通,並將資料封裝成 DTO,之後會丟入 Controller 中執行動作,並設定 API 路徑等。

資料封裝 Service 層

負責資料的邏輯封裝,要先建立一個 Interface,這個 Interface 像是發言人一樣,是一個溝通統一窗口。

  1. 在 Service package 中建立 Interface class,如下
package com.spring.blog.service;

import com.spring.blog.payloads.PostDto;

public interface PostService {

    PostDto createPost(PostDto postDto);
}
  1. 在 Service impl package 中建立 PostServiceImpl class

這個 class 因為要跟 Entity 溝通,所以要記得 import,並且也需要先在 Post 的 Entity 以及 PostRepository 中建立 Getter 和 Setter 的 function (可以使用: 按下右鍵 > Generate 來生成 Getter 以及 Setter)

以下 Code 會將資料包成 DTO 物件並回傳,如下:


package com.spring.blog.service.impl;

import com.spring.blog.payloads.PostDto;
import com.spring.blog.repository.PostRepository;
import com.spring.blog.service.PostService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.spring.blog.entity.Post;
@Service
public class PostServiceImpl implements PostService {
    private PostRepository postRepository;
    //only one Constructors
    public PostServiceImpl(PostRepository postRepository){
        this.postRepository = postRepository;
    }
    @Override
    public PostDto createPost(PostDto postDto) {

        Post post = new Post();
        post.setTitle(postDto.getTitle());
        post.setDescription(postDto.getDescription());
        post.setContent(postDto.getContent());

        Post newPost = postRepository.save(post);
        // 將 entity 轉成 DTO
        PostDto postResponse = new PostDto();
        postResponse.setId(newPost.getId());
        postResponse.setTitle(newPost.getTitle());
        postResponse.setDescription(newPost.getDescription());
        postResponse.setContent(newPost.getContent());

        return postResponse;
    }
}

資料處理 Controlloer 層

在 Controller 中建立 PostController class

使用 @RestController 以及 @ResponseBody 來將 Java 物件轉換成 JSON 格式

使用 @RequestMapping 定義 URL 的 path

package com.spring.blog.controller;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.spring.blog.service.PostService;
import com.spring.blog.payloads.PostDto;
@RestController
@RequestMapping("/api/posts")
public class PostController {
    private PostService postService;
    public PostController(PostService postService){
        this.postService = postService;
    }
    // 建立新文章
    @PostMapping
    public ResponseEntity<PostDto> cretePost(@RequestBody PostDto postDto){
        return new ResponseEntity<>(postService.createPost(postDto), HttpStatus.CREATED);
    }
}

以上都完成後,在 main class 按下 Run 後,就建置完成囉! 新增貼文的 API path 就會是 http://localhost:8080/api/posts

Post API 測試

這邊將會用 Postman 這個軟體來做測試。
以下在 Postman 運行:

  1. 首先新增一個 Workbench
  2. 選擇 JSON 格式以及 Post method
    https://ithelp.ithome.com.tw/upload/images/20230911/20126089OVMuMb5rOB.png
  3. 輸入以下資料來新增
{
    "id": 1,
    "title": "First Post",
    "description": "Post description",
    "content": "This is my new post."
}
  1. 按下 Send 後,如果 Console 有顯示 201 Created 就是成功了喔~ 可以檢查 DB,看資料是否有新增成功
    https://ithelp.ithome.com.tw/upload/images/20230911/20126089dKNzq8uZS3.png

以上是關於新增貼文的 API 實作以及測試,明天將會講述如何建立「取得所有貼文」的 API~ 有興趣的記得來看喔~

若文中有錯誤之處還請多多包涵與指正,歡迎在文章下方留言討論!

明天見~
/images/emoticon/emoticon30.gif


上一篇
Day4 Java Spring API 之資料系統建構 — 發文功能
下一篇
Day 6 Java Spring API 之資料系統建構 — 撈出文章功能
系列文
Java Spring + Vue 甘苦學習路 前後端分離之 Blog 實戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言